#!/usr/bin/env python3
"""
流量统计查询脚本
用于查看当前的流量使用情况
"""

import asyncio
import sys
import os
from datetime import datetime, timedelta

# 添加项目根目录到Python路径
sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))

from app.utils.traffic_monitor import traffic_monitor, print_traffic_stats


async def main():
    """主函数"""
    print("📊 煤炉监控系统 - 流量统计报告")
    print("=" * 60)
    
    try:
        # 今日统计
        print("\n🗓️ 今日流量统计:")
        await print_traffic_stats()
        
        # 昨日统计
        yesterday = (datetime.now() - timedelta(days=1)).strftime("%Y-%m-%d")
        print(f"\n🗓️ 昨日流量统计 ({yesterday}):")
        await print_traffic_stats(yesterday)
        
        # 详细的今日统计
        today_stats = await traffic_monitor.get_daily_stats()
        proxy_stats = await traffic_monitor.get_proxy_stats()

        print(f"\n📈 详细统计信息:")
        print(f"  📅 日期: {today_stats.get('date', 'N/A')}")
        print(f"  📊 总流量: {today_stats.get('total_mb', 0)} MB ({today_stats.get('total_bytes', 0)} 字节)")
        print(f"  📤 请求流量: {today_stats.get('request_bytes', 0)} 字节")
        print(f"  📥 响应流量: {today_stats.get('response_bytes', 0)} 字节")
        print(f"  🔢 请求总数: {today_stats.get('request_count', 0)}")
        print(f"  ✅ 成功请求: {today_stats.get('success_count', 0)}")
        print(f"  ❌ 失败请求: {today_stats.get('error_count', 0)}")
        print(f"  📊 成功率: {today_stats.get('success_rate', 0)}%")
        print(f"  📏 平均响应大小: {today_stats.get('avg_response_size', 0)} 字节")

        # 最近三个小时的平均请求大小
        print(f"\n⏰ 最近三个小时平均请求大小:")
        current_hour = datetime.now()
        for i in range(3):
            hour_time = current_hour - timedelta(hours=i)
            hour_key = hour_time.strftime("%Y-%m-%d-%H")
            hour_stats = await traffic_monitor.get_hourly_stats(hour_key)

            if hour_stats.get('request_count', 0) > 0:
                avg_size = hour_stats.get('total_bytes', 0) / hour_stats.get('request_count', 1)
                print(f"  🕐 {hour_time.strftime('%H:00')}: {avg_size:.0f} 字节 ({avg_size/1024:.1f} KB) - {hour_stats.get('request_count', 0)} 请求")
            else:
                print(f"  🕐 {hour_time.strftime('%H:00')}: 无数据")
        
        if proxy_stats:
            print(f"\n🌐 代理使用详情:")
            for proxy, stats in proxy_stats.items():
                print(f"  📡 {proxy}: {stats['total_mb']} MB ({stats['request_count']} 请求)")
        
        # 流量预估
        if today_stats.get('request_count', 0) > 0:
            avg_per_request = today_stats.get('total_bytes', 0) / today_stats.get('request_count', 1)
            print(f"\n🔮 流量预估:")
            print(f"  📊 平均每请求: {avg_per_request:.0f} 字节")
            
            # 假设100个监控，按当前四档调度估算
            daily_requests = (
                10 * (24 * 3600 / 3) +    # 3秒档：10个监控
                30 * (24 * 3600 / 15) +   # 15秒档：30个监控  
                40 * (24 * 3600 / 30) +   # 30秒档：40个监控
                20 * (24 * 3600 / 60)     # 60秒档：20个监控
            )
            
            estimated_daily_mb = (daily_requests * avg_per_request) / 1024 / 1024
            estimated_monthly_mb = estimated_daily_mb * 30
            
            print(f"  📅 预估日流量(100监控): {estimated_daily_mb:.1f} MB")
            print(f"  📅 预估月流量(100监控): {estimated_monthly_mb:.1f} MB")
            
            if estimated_monthly_mb > 1024:
                print(f"  📅 预估月流量(100监控): {estimated_monthly_mb/1024:.1f} GB")
        
    except Exception as e:
        print(f"❌ 查询流量统计失败: {e}")
        import traceback
        traceback.print_exc()


if __name__ == "__main__":
    asyncio.run(main())
